#include "photo.h"
#include "ui_photo.h"
#include <QDebug>
#include <QFileInfo>
#include <QPixmap>
#include <QDir>
#include <QCoreApplication> // 用于获取应用路径

photo::photo(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::photo),
    timer(new QTimer(this)),
    currentIndex(-1), // 初始化为无效索引
    isPlaying(true)
{
    ui->setupUi(this);
    ui->pushButton->setStyleSheet("border-image: url(./btn1.jpg);");
    ui->pushButton_2->setStyleSheet("border-image: url(./btn1.jpg);");
    ui->pushButton_3->setStyleSheet("border-image: url(./btn1.jpg);");
    ui->pushButton_4->setStyleSheet("border-image: url(./btn1.jpg);");

    QPalette pal = this->palette();
    pal.setBrush(QPalette::Background,QBrush(QPixmap("./bg.jpg")));
    setPalette(pal);
    // 设置初始状态
    ui->label_2->setText("正在初始化相册...");

    // 连接定时器到图片切换函数
    connect(timer, &QTimer::timeout, this, &photo::playNextImage);

    // 加载图片
    loadImages();

    // 如果有图片，显示第一张并启动定时器
    if(!imageList.isEmpty()) {
        showImage(0);
        timer->start(3000); // 3秒自动切换
    }

    // 设置按钮初始文本
    ui->pushButton_2->setText("暂停");

    // 输出当前工作目录用于调试
    qDebug() << "当前工作目录:" << QDir::currentPath();
}

photo::~photo()
{
    // 确保安全释放资源
    if(timer) {
        if(timer->isActive()) timer->stop();
        delete timer;
    }
    delete ui;
}

void photo::loadImages()
{
    // 清空图片列表
    imageList.clear();

    // 获取当前运行目录下的photo目录
    QDir imageDir(QDir::currentPath() + "/photo");

    // 调试输出路径
    qDebug() << "图片目录:" << imageDir.absolutePath();

    // 检查目录是否存在
    if(!imageDir.exists()) {
        // 提示用户目录不存在
        ui->label_2->setText("错误: 图片目录不存在\n" + imageDir.absolutePath());
        qDebug() << "图片目录不存在";
        return;
    }

    // 设置图片过滤器
    QStringList filters;
    filters << "*.png" << "*.jpg" << "*.jpeg" << "*.bmp" << "*.gif";

    // 获取文件名列表
    imageList = imageDir.entryList(filters, QDir::Files);

    // 如果没有图片，提示用户
    if(imageList.isEmpty()) {
        ui->label_2->setText("提示: 目录中没有图片\n支持的格式: PNG/JPG/JPEG/BMP/GIF");
        qDebug() << "没有找到图片";
    } else {
        qDebug() << "找到图片数量:" << imageList.size();
    }
}

void photo::showImage(int index)
{
    // 如果没有图片，直接返回
    if(imageList.isEmpty()) {
        ui->label_2->setText("错误: 没有可显示的图片");
        return;
    }

    // 检查索引是否有效
    if(index < 0) {
        // 如果是第一张，跳到尾部
        index = imageList.size() - 1;
    } else if(index >= imageList.size()) {
        // 如果是最后一张，跳到头部
        index = 0;
    }

    // 更新当前索引
    currentIndex = index;

    // 构建完整图片路径（使用绝对路径）
    QString filePath = QDir::currentPath() + "/photo/" + imageList.at(currentIndex);

    // 加载图片
    QPixmap pixmap(filePath);

    // 检查图片是否加载成功
    if(pixmap.isNull()) {
        ui->label_2->setText("图片加载失败: " + imageList.at(currentIndex));
        qDebug() << "加载失败:" << filePath;
        return;
    }

    // 显示图片（保持比例，平滑缩放）
    ui->label->setPixmap(pixmap.scaled(ui->label->size(),
                                      Qt::KeepAspectRatio,
                                      Qt::SmoothTransformation));

    // 更新状态信息
    updateStatus();
}

void photo::updateStatus()
{
    // 如果没有图片，更新状态信息
    if(imageList.isEmpty()) {
        ui->label_2->setText("状态: 没有可显示的图片");
        return;
    }

    // 确保索引在有效范围内
    if(currentIndex < 0 || currentIndex >= imageList.size()) {
        currentIndex = 0;
    }

    // 获取当前文件名
    QString fileName = imageList.at(currentIndex);

    // 构建完整路径
    QString filePath = QDir::currentPath() + "/photo/" + fileName;

    // 加载图片获取尺寸
    QPixmap pixmap(filePath);
    QString sizeInfo;
    if(pixmap.isNull()) {
        sizeInfo = "未知";
    } else {
        sizeInfo = QString("%1×%2").arg(pixmap.width()).arg(pixmap.height());
    }

    // 格式化状态信息
    QString status = QString("图片: %1/%2\n文件: %3\n尺寸: %4\n状态: %5")
                    .arg(currentIndex + 1)
                    .arg(imageList.size())
                    .arg(fileName)
                    .arg(sizeInfo)
                    .arg(isPlaying ? "播放中" : "已暂停");

    // 更新状态显示
    ui->label_2->setText(status);
}

// 安全播放下一张
void photo::playNextImage()
{
    // 如果没有图片，不执行操作
    if(imageList.isEmpty()) return;

    // 如果索引无效，从第一张开始
    if(currentIndex < 0) currentIndex = 0;

    // 显示下一张图片
    showImage(currentIndex + 1);
}

// 上一张按钮槽函数
void photo::on_pushButton_clicked()
{
    // 如果没有图片，不执行操作
    if(imageList.isEmpty()) return;

    // 显示上一张图片
    showImage(currentIndex - 1);
}

// 暂停/继续按钮槽函数
void photo::on_pushButton_2_clicked()
{
    // 切换播放状态
    isPlaying = !isPlaying;

    if(isPlaying) {
        // 如果是播放状态
        ui->pushButton_2->setText("暂停");

        // 如果有图片，启动定时器
        if(!imageList.isEmpty()) {
            timer->start(3000);
        }
    } else {
        // 如果是暂停状态
        ui->pushButton_2->setText("继续");

        // 停止定时器
        timer->stop();
    }

    // 更新状态显示
    updateStatus();
}

// 下一张按钮槽函数
void photo::on_pushButton_3_clicked()
{
    // 如果没有图片，不执行操作
    if(imageList.isEmpty()) return;

    // 显示下一张图片
    showImage(currentIndex + 1);
}

// 返回主窗口按钮槽函数
void photo::on_pushButton_4_clicked()
{
    // 尝试获取父窗口
    if(QWidget *parent = this->parentWidget()) {
        // 显示并置顶父窗口
        parent->show();
        parent->raise();
    }

    // 关闭当前相册窗口
    this->close();
}
